/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package View;

import Model.Dao.AlunoImpl;
import Model.Dao.DisciplinaImpl;
import Model.Dao.FaltaImpl;
import Model.Dao.NotaImpl;
import Model.Dao.ProfessorImpl;
import Model.Dao.TurmaImpl;
import Model.Pojo.Aluno;
import Model.Pojo.Atividade;
import Model.Pojo.Disciplina;
import Model.Pojo.Falta;
import Model.Pojo.HistoricoEscolar;
import Model.Pojo.Nota;
import Model.Pojo.Professor;
import Model.Pojo.Turma;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayList;

/**
 *
 * @author Amanda
 */
public class MenuTurma {

    AlunoImpl alunoImpl;
    DisciplinaImpl disciplinaImpl;
    FaltaImpl faltaImpl;
    NotaImpl notaImpl;
    ProfessorImpl professorImpl;
    TurmaImpl turmaImpl;
    Nota nota = null;

    public MenuTurma(AlunoImpl alunoImpl, DisciplinaImpl disciplinaImpl, FaltaImpl faltaImpl,
            NotaImpl notaImpl, ProfessorImpl professorImpl, TurmaImpl turmaImpl) {
        this.alunoImpl = alunoImpl;
        this.disciplinaImpl = disciplinaImpl;
        this.faltaImpl = faltaImpl;
        this.notaImpl = notaImpl;
        this.professorImpl = professorImpl;
        this.turmaImpl = turmaImpl;





    }

    public void menuCadastroTurma() throws IOException {
        Disciplina disciplinaX = null;
        ArrayList<Professor> professorX = null;

        int cadastrarMaisUm = 1;

        int i = 1;
        boolean terminar = true;
        BufferedReader buf = new BufferedReader(new InputStreamReader(System.in));
        while (cadastrarMaisUm == 1) {

            limpaTela();

            System.out.println("Informe a disciplina desejada:");

            for (Disciplina disciplina : disciplinaImpl.getDisciplinaList()) {
                System.out.println(i + ":" + disciplina.getNome());

                System.out.println(" ");
                i++;
            }
            String leitura = buf.readLine();
            int escolha = Integer.parseInt(leitura);
            int cont = 1;
            for (Disciplina disciplina : disciplinaImpl.getDisciplinaList()) {
                if (cont == escolha) {
                    disciplinaX = disciplina;
                    break;

                } else {
                    cont++;
                }
            }
            while (terminar) {
                System.out.println("Informe o professor desejado:");

                for (Professor professor : professorImpl.getProfessorList()) {
                    System.out.println("");

                    System.out.println(" ");
                    i++;
                }
                leitura = buf.readLine();
                escolha = Integer.parseInt(leitura);
                cont = 1;
                for (Professor professor : professorImpl.getProfessorList()) {
                    if (cont == escolha) {
                        professorX.add(professor);
                        break;

                    } else {
                        cont++;
                    }
                }
                System.out.println("Voce deseja cadastrar mais um professor? Digite 1 para Sim e 0 para nao");
                int opcao = Integer.parseInt(buf.readLine());
                if (opcao == 0) {
                    terminar = false;
                    break;
                }
            }


            System.out.println("Digite o ano da turma a ser cadastrada.");
            String anoTurma = buf.readLine();

            System.out.println("Digite o periodo da turma a ser cadastrado.");
            String periodoTurma = buf.readLine();

            System.out.println("Digite o local em que a turma sera fornecida.");
            String localTurma = buf.readLine();

            System.out.println("Digite o horario que a turma sera oferecida.");
            String horarioTurma = buf.readLine();

            System.out.println("Digite o numero de vagas disponiveis para a turma.");
            String vagas = buf.readLine();
            Integer numeroVagas = Integer.parseInt(vagas);
            Turma turma = new Turma(anoTurma, periodoTurma, localTurma, horarioTurma, numeroVagas,
                    professorX, disciplinaX);
            turmaImpl.gravarobjeto(turma);
            professorX.clear();

            System.out.println("Turma cadastrada com sucesso!");

            System.out.println("Voce deseja cadastrar mais uma turma? Digite 1 para Sim e 0 para nao");
            cadastrarMaisUm = Integer.parseInt(buf.readLine());

        }

    }

    public void InserirAlunoNaTurma() throws IOException {

        int cadastrarMaisUm = 1;
        Turma turmaX = null;
        Aluno alunoX = null;
        int i = 1;
        String leitura;
        BufferedReader buf = new BufferedReader(new InputStreamReader(System.in));

        limpaTela();



        System.out.println("Informe a turma desejada:");

        for (Turma turma : turmaImpl.getTurmaList()) {
            System.out.println(i + ":" + "Ano: " + turma.getAno() + "\t Periodo:" + turma.getPeriodo() + "\t Local:"
                    + turma.getLocal() + "\t Horario:" + turma.getHorario() + "\t Vagas:"
                    + turma.getVagas() + "\t Disciplina:" + turma.getDisciplina().getNome());

            System.out.println(" ");
            i++;
        }
        leitura = buf.readLine();
        int escolha = Integer.parseInt(leitura);
        int cont = 1;
        for (Turma turma : turmaImpl.getTurmaList()) {
            if (cont == escolha) {
                turmaX = turma;
                break;

            } else {
                cont++;
            }
        }




        while (cadastrarMaisUm == 1) {
            limpaTela();

            System.out.println("Informe os alunos que deseja adicionar:");

            for (Aluno aluno : alunoImpl.getAlunoList()) {
                System.out.println(i + ":" + "Nome: " + aluno.getNome());

                System.out.println(" ");
                i++;
            }
            leitura = buf.readLine();
            escolha = Integer.parseInt(leitura);
            cont = 1;
            for (Aluno aluno : alunoImpl.getAlunoList()) {
                if (cont == escolha) {
                    alunoX = aluno;
                    break;

                } else {
                    cont++;
                }
            }
            Falta falta = new Falta(0, alunoX, turmaX);
            faltaImpl.adicionarFalta(falta);


     
            for (Atividade atividade : turmaX.getAtividade()) {
                nota = new Nota(alunoX, atividade, 0);
                notaImpl.adicionarNota(nota);

            }
            System.out.println("Deseja cadastrar mais algum aluno? Digite 1 para Sim e 0 para Nao.");
            int resposta = Integer.parseInt(buf.readLine());
            if (resposta == 0) {
                cadastrarMaisUm = 0;



            }

        }
    }

    public void lancarNotas() throws IOException {
        Turma turmaX = null;
        Atividade atividadeX = null;
        double nota = 0.0;
        int i = 1;
        String leitura;
        BufferedReader buf = new BufferedReader(new InputStreamReader(System.in));

        limpaTela();



        System.out.println("Informe a turma desejada:");

        for (Turma turma : turmaImpl.getTurmaList()) {
            System.out.println(i + ":" + "Ano: " + turma.getAno() + "\t Periodo:" + turma.getPeriodo() + "\t Local:"
                    + turma.getLocal() + "\t Horario:" + turma.getHorario() + "\t Vagas:"
                    + turma.getVagas() + "\t Disciplina:" + turma.getDisciplina().getNome());

            System.out.println(" ");
            i++;
        }
        leitura = buf.readLine();
        int escolha = Integer.parseInt(leitura);
        int cont = 1;
        for (Turma turma : turmaImpl.getTurmaList()) {
            if (cont == escolha) {
                turmaX = turma;
                break;

            } else {
                cont++;
            }
        }


        limpaTela();



        System.out.println("Informe a atividade que deseja lancar nota:");
        i = 1;
        for (Atividade atividade : turmaX.getAtividade()) {
            System.out.println(i + ":" + "Nome: " + atividade.getNome() + "\t Tipo:" + atividade.getTipo() + "\t Data:"
                    + atividade.getData() + "\t Valor:" + atividade.getValor());

            System.out.println(" ");
            i++;
        }
        leitura = buf.readLine();
        escolha = Integer.parseInt(leitura);
        cont = 1;
        for (Atividade atividade : turmaX.getAtividade()) {
            if (cont == escolha) {
                atividadeX = atividade;
                break;

            } else {
                cont++;
            }
        }
        i = 1;
        for (Falta falta : turmaX.getFalta()) {
            System.out.println(i + ":" + ": " + falta.getAluno().getNome());
            System.out.println("Entre com a nota para esse aluno.");
            leitura = buf.readLine();
            nota = Double.parseDouble(leitura);
            System.out.println(" ");
            i++;
            for (Nota nota1 : falta.getAluno().getNotas()) {
                if (nota1.getAtividade().getNome() == atividadeX.getNome() && nota1.getAtividade().getTipo() == atividadeX.getTipo()) {
                    nota1.setNota(nota);
                }
            }
        }




    }

    public void finalizarTurma(Turma turma) throws IOException {
        HistoricoEscolar historicoEscolar = null;
        double valorTotal = 0;
        double soma = 0;
        double totalNota = 0;
        int totalFaltas = 0;
        for (Atividade atividade : turma.getAtividade()) {
            valorTotal = valorTotal + atividade.getValor();
        }


        for (Falta falta : turma.getFalta()) {
            for (Nota nota : falta.getAluno().getNotas()) {
                soma = soma + nota.getNota();

            }

            totalFaltas = falta.getTotalFalta() * 100 / turma.getDisciplina().getCargaHoraria();
            totalNota = soma * 100 / valorTotal;

            if (totalFaltas <= 25 && totalNota >= 60) {
                historicoEscolar = new HistoricoEscolar(falta.getAluno(), totalNota, falta.getTotalFalta(), true, turma.getDisciplina());

            } else {
                historicoEscolar = new HistoricoEscolar(falta.getAluno(), totalNota, falta.getTotalFalta(), false, turma.getDisciplina());
            }


        }

    }

    public void limpaTela() {
        for (int i = 0; i < 50; i++) {
            System.out.println("");
        }

    }
}
